package org.summerframework.component.security.annotion;

import org.springframework.core.annotation.AliasFor;

import java.lang.annotation.*;

/**
 * 调用 {@link #service()} 的 {@link #methodName()} 方法, 参数类型为 {@link #paramType()}, 参数为request中的{@link #param()}
 *
 * @author 石超
 * @version v1.0.0
 */
@Documented
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.METHOD, ElementType.TYPE})
public @interface UserPermission {
    /**
     * 获取的参数
     * <p>
     * 因为{@link AliasFor}的缘故  value和param二选一
     */
    @AliasFor("param")
    String[] value() default "id";

    @AliasFor("value")
    String[] param() default "id";

    /**
     * 方法体参数的类型
     */
    Class<?>[] paramType() default {Long.class};

    /**
     * 最终返回参数中的字段, 如果直接返回Long类型, 传空即可
     */
    String property() default "userId";

    /**
     * 需要调用的service, 获取userId
     */
    Class<?> service();

    /**
     * 调用service的方法名称
     */
    String methodName() default "selectById";
}
